package com.handsome.代理模式.动态代理;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

/**
 * @author niechun
 * @date 2023/3/11 17:04
 */
public class ProxyFactory {
    private Object target;

    public ProxyFactory(Object target) {
        this.target = target;
    }

    public Object newInstance(){
        /***
         *  public static Object newProxyInstance(ClassLoader loader,
         *                                           Class<?>[] interfaces,
         *                                           InvocationHandler handler)
         *                              throws IllegalArgumentException
         *      loader:指定当前对象使用的类加载器
         *      interfaces:目标对象实现的接口类型
         *      handler:事件处理执行目标对象的方法时会出发事件处理器方法，会把当前执行的对象方法作为参数传入
         */
        return Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), (Object proxy,Method method,Object[] args)->{
            System.out.println("jdk代理开始");
            Object invoke = method.invoke(target, args);
            return invoke;
        });
    }
}
